package com.itheima.d07_proxy_quickstart;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.lang.reflect.Proxy;

/**
 * 目标：掌握动态代理使用场景（解决的问题）
 */
public class TestDog {
    //需求：统计各个功能方法的执行性能（耗时）
    DogService target ;
    IDogService proxy;


    @BeforeEach
    public void beforeAll(){
        target = new DogService();

        //创建代理对象：JDK动态代理
        /**
         * 参数一：类加载器，获取代理对象使用
         * 参数二：接口数组，代理对象了解目标对象都有哪些功能方法（代理类能够增强的，目标类实现的接口的哪些方法）
         * 参数三：处理器，负责代理增强目标方法的功能
         */
        proxy = (IDogService) Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new CountTimeInvocationHandler(target)
        );
    }

    @Test
    public void testAddDog(){
        proxy.addDog();
    }

    @Test
    public void testDelDog(){
        proxy.deleteDog();
    }

    @Test
    public void testUpdateDog(){
        proxy.updateDog();
    }


    @Test
    public void testSelectDog(){
        proxy.selectDog();
    }
}
